package Demo18;
//
//public class Demo18 {
//
//    public static String locker = "hello";
//    public static  int  a = 3;
//
//    public static void main(String[] args) throws InterruptedException {
//
//        //打印a
//        Thread t1 = new Thread(() -> {
//            while(true) {
//                synchronized (locker) {
//                    while(a != 1) {
//                        try {
//                            locker.wait();
//                        } catch (InterruptedException e) {
//                            throw new RuntimeException(e);
//                        }
//                    }
//                    System.out.println("a");
//                    try {
//                        Thread.sleep(1000);
//                    } catch (InterruptedException e) {
//                        throw new RuntimeException(e);
//                    }
//                    a = 3;
//                    locker.notifyAll();
//                }
//            }
//        });
//
//        //打印b
//        Thread t2 = new Thread(() -> {
//            while(true) {
//                synchronized (locker) {
//                    while(a != 2) {
//                        try {
//                            locker.wait();
//                        } catch (InterruptedException e) {
//                            throw new RuntimeException(e);
//                        }
//                    }
//                    System.out.println("b");
//                    try {
//                        Thread.sleep(1000);
//                    } catch (InterruptedException e) {
//                        throw new RuntimeException(e);
//                    }
//                    a = 1;
//                    locker.notifyAll();
//                }
//            }
//        });
//
//        //打印c
//        Thread t3 = new Thread(() -> {
//            while(true) {
//                synchronized (locker) {
//                    while(a != 3) {
//                        try {
//                            locker.wait();
//                        } catch (InterruptedException e) {
//                            throw new RuntimeException(e);
//                        }
//                    }
//                    System.out.println("c");
//                    try {
//                        Thread.sleep(1000);
//                    } catch (InterruptedException e) {
//                        throw new RuntimeException(e);
//                    }
//                    a = 2;
//                    locker.notifyAll();
//                }
//            }
//        });
//
//        t1.start();
//        t2.start();
//        t3.start();
//        t1.join();
//        t2.join();
//        t3.join();
//
//    }
//}


public class Demo18 {
    public static void main(String[] args) throws InterruptedException {
        // 创建三个线程
        Thread tc = new Thread(() -> {
            // 打印c
            System.out.print(Thread.currentThread().getName() + " ");
        }, "c");

        Thread tb = new Thread(() -> {
            try {
                // 等待c 执行完成
                tc.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 打印b
            System.out.print(Thread.currentThread().getName() + " ");
        }, "b");

        Thread ta = new Thread(() -> {
            try {
                // 等待b 执行完成
                tb.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 打印a
            System.out.print(Thread.currentThread().getName() + " ");
        }, "a");

        // 需要让他们同时启动，并按 c，b，a的顺序打印
        ta.start();
        tb.start();
        tc.start();
    }
}
